package se.spot4j.model;

import java.util.List;

import se.spot4j.entity.Album;
import se.spot4j.entity.Artist;
import se.spot4j.entity.Track;
import se.spot4j.exceptions.Spot4JConnectionException;
import se.spot4j.exceptions.Spot4JMalformedRequestException;
import se.spot4j.exceptions.Spot4JRateLimitOversteppedException;
import se.spot4j.exceptions.Spot4JServiceUnavailableException;
import se.spot4j.exceptions.UnexpectedSpotifyResponseException;

public interface SpotifyHandler {

	public List<Artist> findArtistsByName(String name) throws Spot4JConnectionException, UnexpectedSpotifyResponseException, Spot4JRateLimitOversteppedException, Spot4JRateLimitOversteppedException, Spot4JMalformedRequestException, Spot4JServiceUnavailableException;
	public Artist findArtistBySpotifyURI(String uri) throws Spot4JConnectionException, UnexpectedSpotifyResponseException, Spot4JRateLimitOversteppedException, Spot4JRateLimitOversteppedException, Spot4JMalformedRequestException, Spot4JServiceUnavailableException;
	
	public List<Album> findAlbumsByName(String name) throws Spot4JConnectionException, UnexpectedSpotifyResponseException, Spot4JRateLimitOversteppedException, Spot4JRateLimitOversteppedException, Spot4JMalformedRequestException, Spot4JServiceUnavailableException;
	public Album findAlbumBySpotifyURI(String uri) throws Spot4JConnectionException, UnexpectedSpotifyResponseException, Spot4JRateLimitOversteppedException, Spot4JRateLimitOversteppedException, Spot4JMalformedRequestException, Spot4JServiceUnavailableException;
	
	public List<Track> findTracksByName(String name) throws Spot4JConnectionException, UnexpectedSpotifyResponseException, Spot4JRateLimitOversteppedException, Spot4JRateLimitOversteppedException, Spot4JMalformedRequestException, Spot4JServiceUnavailableException;
	public Track findTrackBySpotifyURI(String uri) throws Spot4JConnectionException, UnexpectedSpotifyResponseException, Spot4JRateLimitOversteppedException, Spot4JRateLimitOversteppedException, Spot4JMalformedRequestException, Spot4JServiceUnavailableException;
	
}
